perm filename IP.H[IP,SYS] blob
sn#680182 filedate 1982-10-07 generic text, type T, neo UTF8
struct ip { /* ip leader */
#ifdef mbb
u_char ip_x1:2, /* (unused) */
ip_v:4, /* version */
ip_hl:4; /* header length */
#else /* vax */
u_char ip_hl:4, /* header length */
ip_v:4; /* version */
#endif
u_char ip_tos; /* type of service */
#define ip_mff ip_tos /* more fragments flag (input) */
u_short ip_len; /* total length */
u_short ip_id; /* identification */
u_short ip_off; /* fragment offset field */
#define ip_df 0x4000 /* dont fragment flag */
#define ip_mf 0x2000 /* more fragments flag (output) */
u_char ip_ttl; /* time to live */
u_char ip_p; /* protocol */
u_short ip_sum; /* checksum */
#define ip_end ip_sum /* fragment end */
union {
struct socket ip_s; /* source address */
struct ip *ip_nxt; /* ->next fragment */
} I_sun;
#define ip_src I_sun.ip_s
#define ip_next I_sun.ip_nxt
union {
struct socket ip_d; /* destination address */
struct ip *ip_prv; /* ->prev fragment */
} I_dun;
#define ip_dst I_dun.ip_d
#define ip_prev I_dun.ip_prv
};
/* ip options */
#define IP_OPT_COPY 0x80 /* option copy type flag */
#define IP_OPT_DEBUG 0x40 /* option debug class (2) */
#define IP_END_OPT 0 /* end of option list */
#define IP_NOP_OPT 1 /* nop option */
#define IP_SEC_OPT 2+IP_OPT_COPY /* security option */
#define IP_SEC_OPTLEN 11 /* length */
#define IP_SEC_OPTHDR 0x0b82 /* opt/len */
#define IP_LRTE_OPT 3+IP_OPT_COPY /* loose source and record route */
#define IP_TIME_OPT 4+IP_OPT_DEBUG /* timestamp */
#define IP_RRTE_OPT 7 /* record route */
#define IP_STRID_OPT 8+IP_OPT_COPY /* stream ID */
#define IP_STRID_OPTLEN 4 /* length */
#define IP_STRID_OPTHDR 0x0488 /* opt/len */
#define IP_SRTE_OPT 9+IP_OPT_COPY /* strict source and record route */
struct ipq { /* ip reass.q header */
struct ip iqx; /* dummy ip element for top of list */
struct ipq *iq_next; /* -> next chain on q */
struct ipq *iq_prev; /* -> prev chain on q */
struct ip iqh; /* fragment header */
};
#define IPVERSION 4 /* internet protocol version number */
#define IPMAX 576 /* maximum spec ip packet length */
#define IPMAXOPT 40 /* maximum length of internet options */
#define MAXTTL 10 /* maximum time to live (seconds) */
/* Enqueue a fragment on the reassembly chain. */
#define ip_enq(p, prev) \
{ register struct ip *PREV = prev; \
\
p->ip_prev = PREV; \
p->ip_next = PREV->ip_next; \
PREV->ip_next->ip_prev = p; \
PREV->ip_next = p; \
}
/* Dequeue a fragment from reassembly chain. */
#define ip_deq(p) \
{ \
p->ip_prev->ip_next = p->ip_next; \
p->ip_next->ip_prev = p->ip_prev; \
}